package edu.utn.tacs.grupouno.dao;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import edu.utn.tacs.grupouno.negocio.Dia;
import edu.utn.tacs.grupouno.negocio.Turno;
import edu.utn.tacs.grupouno.negocio.TurnoSemanal;

public abstract class AbstractTurnoContainer implements TurnoContainer {

	@Override
	public abstract void addTurnoAsignado(Date date, Turno turno);

	@Override
	public abstract void addTurnoSemanal(TurnoSemanal tsem);

	@Override
	public List<Turno> getTurnosByDia(Dia dia) {
		ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
		Date date = dia.getFecha();
		Map<String, Turno> mapaHorarioTurno = new HashMap<String, Turno>();
		
		for(TurnoSemanal tsem : getTurnosSemanalesDesde(date)) {
			Turno turnoDisponible = context.getBean("turnoDisponible", Turno.class);
			turnoDisponible.setTurnoSemanal(tsem);
			turnoDisponible.setFecha(date);
			mapaHorarioTurno.put(tsem.getHorario(), turnoDisponible);
		}
		
		List<Turno> turnosAsignadosEnDia = getTurnosAsignadosByDia(date);
		if(turnosAsignadosEnDia != null) {
			for(Turno turno : turnosAsignadosEnDia) {
				String horario = turno.getTurnoSemanal().getHorario();
				turno.setTurnoSemanal(mapaHorarioTurno.get(horario).getTurnoSemanal()); //Hack porque JDO me no trae bien el tsem
				mapaHorarioTurno.put(horario, turno);
			}
		}
		return new ArrayList<Turno>(mapaHorarioTurno.values());
	}
	
	public abstract List<TurnoSemanal> getTurnosSemanalesDesde(Date fechaInicio);
	
	public abstract List<Turno> getTurnosAsignadosByDia(Date date);

	@Override
	public abstract void liberarTurno(Date date, Turno turno);

}
